/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BussinesLogic;

import EntidadesCM.AfiliadoCM;
import Entities.Afiliado;
import controller.AfiliadoJpaController;
import controller.exceptions.PreexistingEntityException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author Nas
 */
public class AfiliadoBL {

    AfiliadoJpaController afiliadoJpaController;

    public void crearAfiliado(AfiliadoCM afiliadoCM) throws PreexistingEntityException, Exception {
        Afiliado afiliado = new Afiliado();
        afiliadoJpaController = new AfiliadoJpaController();
        afiliado.setDocIdentidad(afiliadoCM.getDocIdentidad());
        afiliado.setNombre(afiliadoCM.getNombre());
        afiliado.setApellido(afiliadoCM.getApellido());
        afiliado.setTelefono(afiliadoCM.getTelefono());
        afiliado.setFechaNacimiento(afiliadoCM.getFechaNacimiento());
        afiliado.setIdTipDocIdenti(afiliadoCM.getIdTipDocIdenti());
        afiliado.setDocIdentidad(afiliadoCM.getDocIdentidad());
        afiliado.setEMail(afiliadoCM.geteMail());
        afiliado.setCreateBy(afiliadoCM.getCreateBy());
        afiliado.setFechaCreate(Calendar.getInstance().getTime());
        afiliadoJpaController.create(afiliado);
    }

    public void editarAfiliado(AfiliadoCM afiliadoCM) throws PreexistingEntityException, Exception {
        Afiliado afiliado = new Afiliado();
        afiliadoJpaController = new AfiliadoJpaController();
        afiliado.setDocIdentidad(afiliadoCM.getDocIdentidad());
        afiliado.setNombre(afiliadoCM.getNombre());
        afiliado.setApellido(afiliadoCM.getApellido());
        afiliado.setTelefono(afiliadoCM.getTelefono());
        afiliado.setFechaNacimiento(afiliadoCM.getFechaNacimiento());
        afiliado.setIdTipDocIdenti(afiliadoCM.getIdTipDocIdenti());
        afiliado.setDocIdentidad(afiliadoCM.getDocIdentidad());
        afiliado.setEMail(afiliadoCM.geteMail());
        afiliado.setModifiedBy(afiliadoCM.getModifiedBy());
        afiliado.setFechaModified(Calendar.getInstance().getTime());
        afiliadoJpaController.edit(afiliado);
    }

    public void eliminarAfiliado(AfiliadoCM afiliadoCM) throws PreexistingEntityException, Exception {
        Afiliado afiliado = new Afiliado();
        afiliadoJpaController = new AfiliadoJpaController();
        afiliadoJpaController.destroy(afiliado.getIdAfiliado());
    }

    public List<AfiliadoCM> buscarAllAfiliados(String estado) throws PreexistingEntityException, Exception {
        List<Afiliado> afiliados;
        List<AfiliadoCM> afiliadosCM = new ArrayList<>();
        afiliadoJpaController = new AfiliadoJpaController();
        if (estado.equalsIgnoreCase("")) {
            afiliados = afiliadoJpaController.findAfiliadoEntities();
        }else{
            afiliados = afiliadoJpaController.findAllByEstado(estado);
        }
        AfiliadoCM afiliadoCM;
        for (Afiliado afiliado : afiliados) {
            afiliadoCM = new AfiliadoCM();
            afiliadoCM.setIdAfiliado(afiliado.getIdAfiliado());
            afiliadoCM.setDocIdentidad(afiliado.getDocIdentidad());
            afiliadoCM.setNombre(afiliado.getNombre());
            afiliadoCM.setFechaNacimiento(afiliado.getFechaNacimiento());
            afiliadoCM.setEstado(afiliado.getEstado());
            afiliadosCM.add(afiliadoCM);
        }
        return afiliadosCM;
    }

    public AfiliadoCM buscarAfiliadoById(Integer id) throws PreexistingEntityException, Exception {
        AfiliadoCM afiliadoCM = new AfiliadoCM();
        Afiliado afiliado;
        afiliadoJpaController = new AfiliadoJpaController();
        afiliado = afiliadoJpaController.findAfiliado(id);
        if (afiliado != null) {
            afiliadoCM.setDocIdentidad(afiliado.getDocIdentidad());
            afiliadoCM.setNombre(afiliado.getNombre());
        }
        return afiliadoCM;
    }

    public List<AfiliadoCM> buscarAfiliadoByNombreCompletoAndDocIdenti(String docIdentidad, String nombre, String estado) {
        List<Afiliado> afiliados = new ArrayList<>();
            afiliadoJpaController = new AfiliadoJpaController();
        List<AfiliadoCM> afiliadosCM = new ArrayList<>();

        if (docIdentidad.equalsIgnoreCase("") && nombre.equalsIgnoreCase("")) {
            afiliados = afiliadoJpaController.findAllByEstado(estado);
        } else if (docIdentidad.equalsIgnoreCase("") && !nombre.equalsIgnoreCase("")) {
            afiliados = afiliadoJpaController.findByNombreCompleto(nombre, estado);

        } else if (docIdentidad.equalsIgnoreCase("") && nombre.equalsIgnoreCase("")) {
            afiliados = afiliadoJpaController.findByDocIdentidadAndNombre(docIdentidad, nombre, estado);
        }else if(!docIdentidad.equalsIgnoreCase("") && nombre.equalsIgnoreCase("")){
            afiliados = afiliadoJpaController.findByDocIdentidad(docIdentidad, estado);
        }

        if (afiliados.size() > 0) {
            AfiliadoCM afiliadoCM;
            for (Afiliado afiliado : afiliados) {
                afiliadoCM = new AfiliadoCM();
                afiliados = new ArrayList<>();
                afiliadoCM.setIdAfiliado(afiliado.getIdAfiliado());
                afiliadoCM.setNombre(afiliado.getNombre());
                afiliadoCM.setApellido(afiliado.getApellido());
                afiliadoCM.setEstado(afiliado.getEstado());
                afiliadoCM.setDocIdentidad(afiliado.getDocIdentidad());
                afiliadoCM.setTelefono(afiliado.getTelefono());
                afiliadoCM.seteMail(afiliado.getEMail());
                afiliadoCM.setIdTipDocIdenti(afiliado.getIdTipDocIdenti()); 
                afiliadoCM.setFechaNacimiento(afiliado.getFechaNacimiento());
                afiliadoCM.setAfiliacionList(new AfiliacionBL().buscarAfiliacionesByIdAfiliado(afiliado.getIdAfiliado()));
                afiliadosCM.add(afiliadoCM);
            }
            return afiliadosCM;
        } else {
            return null;
        }
    
    }
    
}